Hello, 各位 iT 邦幫忙 的粉絲們大家好~~~
在本系列文因為工作上的產品應用需求,進而探索到很多層面的點滴事。透過每篇 EP 的分享把這些點滴整理,看起來或許像是個獨立的小品抒發文、也或許是一系列技術研究文!?
總之,就當作的隨手雜記文吧!
本篇是 莫名其妙就跟世界等級的 OpenSource 專案攪和了!? 系列文的 EP01。
個人技術領域所接觸的都比較偏向 Client 端的範疇,而絕大部分也都是仰賴 .NET 程式當中的 C# 語言搞跨平台應用程式來混飯吃。
過去一陣子的工作上,為了能讓公司的產品能達成跨平台(Linux、Windows、macOS)的多媒體播放應用需求,而開始學習使用 Gstreamer 這套世界級的 OpenSource 專案。
下面是由 ChatGPT 生成,經人工編輯後的 Gstreamer 簡介:
GStreamer 是一個開源、跨平台的多媒體框架,最初由 Erik Walthinsen 於 1999 年開發,目前由 GNOME 社群與多方貢獻者持續維護。它的主要目標是提供一個高度模組化且可擴展的架構,方便開發者在不同平台上處理涵蓋:音訊 (Audio)、影像 (Video)、字幕 (Subtitles) 以及串流傳輸 (Streaming)...等類型的多媒體資料流。
## 核心設計理念
### Pipeline 架構
GStreamer 採用「管線 (pipeline)」的設計模式。多媒體資料由一系列元件(elements)組成,透過串接形成處理流程。這些元件可以是來源(source)、轉換(filter)、編解碼器(codec)、混合器(mixer)、接收器(sink)等。
例如:
[Source] → [Decoder] → [Filter/Effect] → [Encoder] → [Sink]
### 插件機制 (Plugin Architecture)
GStreamer 的功能高度模組化。所有支援的編解碼器、協議與處理功能,都是透過動態載入的插件 (plugins) 提供。這讓 GStreamer 能隨著需求擴充,而不必修改核心程式碼。
### 跨平台支援
GStreamer 支援 Linux、Windows、macOS、Android、iOS 等作業系統,也能在嵌入式裝置(如樹莓派、智慧攝影機、車載系統)中運行。
### 高效能與即時處理
由於其基於 C 與 GLib 實作,GStreamer 能有效率地進行即時多媒體處理,適合應用於 串流媒體、即時通訊、影像會議 與 低延遲影音處理。
## 主要應用場景
1. 媒體播放:建立多媒體播放器(如: Totem、GNOME Videos)。
2. 編解碼轉換:將音訊或影片轉換成不同格式。
3. 影音串流:支援 RTSP、RTP、HTTP Live Streaming (HLS) 等協定。
4. 即時處理:影像特效、語音處理、AI 視覺分析前處理。
5. 嵌入式系統:智慧相機、車載娛樂系統、IoT 裝置。
本文一開始就也提到,生涯工作上大部分都是靠 .NET 的 C# 混飯吃;而公司產品也是靠 .NET 所開發出的 Client 端的應用程式。
按照以往的開發經驗,如果要讓 Gstreamer 能夠透過 C# 呼叫,那大概就必須仰賴 Binding 技術。
想當然,這件事情也不會是我(們)自己突發異想,是世界上第一個 C# 技術團隊有想到要這麼做的。
所以就也就才有了後續攪和的展開...